package org.ccay.audit.exception;

import java.util.Date;

import org.ccay.audit.vo.LogVO;
import org.ccay.core.log.Audit;
import org.ccay.core.log.AuditContext;
import org.ccay.core.log.IAuditor;
import org.ccay.core.util.StringUtil;


/**
 * IAuditor的抽象实现
 * 	
 * @author chaowangbang
 * @since Feb 29, 2012
 */
public abstract class AbstractAuditor implements IAuditor {

	/**
	 * 构造一个LogVO对象
	 * 	
	 * @author chaowangbang
	 * @since Feb 29, 2012
	 * @param auditContext
	 * @return
	 */
	protected LogVO buildCommonLogVO(AuditContext auditContext) {
		LogVO log = new LogVO();

		// 时间
		log.setTimeStamp(new Date());
		
		// 操作者
		log.setUserId(auditContext.getUserId());
		// 操作所属的类
		log.setClazz(auditContext.getTargetClass().getName());
		// 地址标识
		log.setHostIP(auditContext.getCurrentUserIP());
		//方法开始运行时间
		log.setStartDate(auditContext.getStartDate());
		//方法运行结束时间
		log.setEndDate(auditContext.getEndDate());
		//服务器名称
		log.setServerName(auditContext.getServerName());

		// 应用的名称
		log.setApplicationName(log.getAppName());

		Audit audit = auditContext.getMethod().getAnnotation(Audit.class);
		// 模块
		if (audit!=null && !StringUtil.isNullOrEmpty(audit.module())) {
			log.setModule(audit.module());
		}

		// 操作的描述
		if (audit!=null && !StringUtil.isNullOrEmpty(audit.operation())) {
			log.setOperation(audit.operation());
		} else {
			log.setOperation(auditContext.getMethod().getName());
		}

		return log;
	}

}
